package com.sl.core.domain.dto;

import lombok.Getter;
import lombok.Setter;

import java.util.Date;
import java.util.List;

/**
 * 基础的B端登录用户对象，可继承此类扩展更多属性
 *
 */
@Getter
@Setter
public abstract class SaBaseLoginUser {

    /**
     * id
     */
    private String id;

    private String locId;

    private String locName;

    private String wechatAccount;

    private String majorName;


    private Date collegeDate;

    private String empIntro;

    /**
     * 头像
     */
    private String avatar;

    /**
     * 签名
     */
    private String signature;

    /**
     * 账号
     */
    private String account;

    /**
     * 姓名
     */
    private String name;

    /**
     * 昵称
     */
    private String nickname;

    /**
     * 性别
     */
    private String genderCode;

    /**
     * 年龄
     */
    private String age;

    /**
     * 出生日期
     */
    private String birthday;

    /**
     * 民族
     */
    private String nation;

    /**
     * 籍贯
     */
    private String nativePlace;

    /**
     * 家庭住址
     */
    private String homeAddress;

    /**
     * 通信地址
     */
    private String mailingAddress;

    /**
     * 证件类型
     */
    private String idCardType;

    /**
     * 证件号码
     */
    private String idCardNumber;

    /**
     * 文化程度
     */
    private String cultureLevel;

    /**
     * 政治面貌
     */
    private String politicalOutlook;

    /**
     * 毕业院校
     */
    private String college;

    /**
     * 学历
     */
    private String education;

    /**
     * 学制
     */
    private String eduLength;

    /**
     * 学位
     */
    private String degree;

    /**
     * 手机
     */
    private String phone;

    /**
     * 邮箱
     */
    private String email;

    /**
     * 家庭电话
     */
    private String homeTel;

    /**
     * 办公电话
     */
    private String officeTel;

    /**
     * 紧急联系人
     */
    private String emergencyContact;

    /**
     * 紧急联系人电话
     */
    private String emergencyPhone;

    /**
     * 紧急联系人地址
     */
    private String emergencyAddress;

    /**
     * 员工编号
     */
    private String empNo;

    /**
     * 入职日期
     */
    private String entryDate;

    /**
     * 组织id
     */
    private String orgId;

    /**
     * 组织名称
     */
    private String orgName;

    /**
     * 职位编码
     */
    private String positionCode;

    /**
     * 职位名称
     */
    private String positionName;

    /**
     * 职级
     */
    private String positionLevel;

    /**
     * 主管id
     */
    private String directorId;

    /**
     * 兼任信息
     */
    private String positionJson;

    /**
     * 上次登录ip
     */
    private String lastLoginIp;

    /**
     * 上次登录地点
     */
    private String lastLoginAddress;

    /**
     * 上次登录时间
     */
    private Date lastLoginTime;

    /**
     * 上次登录设备
     */
    private String lastLoginDevice;

    /**
     * 最新登录ip
     */
    private String latestLoginIp;

    /**
     * 最新登录地点
     */
    private String latestLoginAddress;

    /**
     * 最新登录时间
     */
    private Date latestLoginTime;

    /**
     * 最新登录设备
     */
    private String latestLoginDevice;

    /**
     * 用户状态
     */
    private String userStatus;

    /**
     * 排序码
     */
    private Integer sortCode;

    /**
     * 扩展信息
     */
    private String extJson;

    /**
     * 按钮码集合
     */
    private List<String> buttonCodeList;

    /**
     * 移动端按钮码集合
     */
    private List<String> mobileButtonCodeList;

    /**
     * 权限码集合
     */
    private List<String> permissionCodeList;

    /**
     * 角色码集合
     */
    private List<String> roleCodeList;

    /**
     * 数据范围集合
     */
    private List<DataScope> dataScopeList;

    /**
     * 用户密码hash值
     */
    private String password;

    /**
     * 是否可登录，由继承类实现
     */
    public abstract Boolean getEnabled();

    /**
     * 数据范围类
     *
     **/
    @Getter
    @Setter
    public static class DataScope {

        /**
         * API接口
         */
        private String apiUrl;

        /**
         * 数据范围
         */
        private List<String> dataScope;
    }
}
